GUILD_CREATE イベントが起きたときに起きることメモ
結論だけ簡潔に述べる。
イベントの対象となった guild は追加 / 上書きされる
付随して roles、members、channels は追加 / 上書きされる
this.client.channels にも追加される
イベントに含まれていた presence は cache に追加される
イベントに含まれていた voiceState は cache に追加 / 上書きされる
イベントに含まれていた emoji は cache に追加される
オフラインからオンラインに復帰した場合にはイベントを発生させることがある
イベントに含まれていた user は cache に追加される
guild._patch()
channels: GuildChannelManager の clear を呼び出す
client.channels: ChannelManager の add を呼び出す
roles: RoleManager を上書き (clear して add)
members: GuildMemberManager を上書き (clear して add)
presences: PresenceManager に presence を追加 (add)
至って素直な挙動をする
voiceState: VoiceStateManager を上書き (clear して add)
こちらも素直に動く
emojis: GuildEmojiManager
その他細々としたプロパティが設定される
guildChannelManager.clear()
普通に全部消すだけ
channelManager.add(channel,guild,cache = true)
roleManager.add()
new Role() を呼び出す
Role の constructor は role._patch() を呼び出す
cache に追加する
role._patch()
細々としたプロパティが設定されるだけで特に変な副作用はない
guildMemberManager.add(arg, cache = true)
cache にその id のメンバーが存在するならば guildMember._patch( arg ) を呼び出す
しなければ GuildMember を arg をもとに new し cache に追加する
GuildMember の constructor は guildMember._patch( arg ) を呼び出す
どちらにせよ guildMember._patch( arg ) が呼ばれる
guildMember._patch()
userManager.add() を呼び出す
なお member の保持する role の id は GuildMember が保持し、roles が呼ばれた場合に GuildMemberRoleManager がguildMember を引数とし作成する
その他細々としたプロパティが設定される
userManager.add()
userが cacheに追加される
guildEmojisUpdateAction.handle()
cache と照らし合わせながら以下の3つのアクションのうちどれを呼ぶか決めている
上記3つのアクションはすべて対応したイベントを呼び出す
上記3つのアクションは対応して cache を 追加 / 更新 / 削除する。